<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>递归例题</title>
</head>
<body>
    
</body>
<script>
    // 1.阶乘
    // 利用递归函数求1~n的阶乘 1 * 2 * 3 * 4 * ..n
    function fn(n) {
        if(n==1){
            return 1;
        }
        return n*fn(n-1)
    }
    console.log(fn(5));

    // 求斐波那契数列 
    // 利用递归函数求斐波那契数列(兔子序列)  1、1、2、3、5、8、13、21...
    // 用户输入一个数字 n 就可以求出 这个数字对应的兔子序列值
    // 我们只需要知道用户输入的n 的前面两项(n-1 n-2)就可以计算出n 对应的序列值
    function fb(n) {
        if(n==1 || n==2) {
            return 1;
        }
        return fb(n-1) +fb(n-2)
    }
    console.log(fb(2));
    console.log(fb(4));

    // 3.根据id返回对应的数据对象
    var data = [{
        id: 1,
        name: '家电',
        goods: [{
            id: 11,
            gname: '冰箱',
            goods: [{
                id: 111,
                gname: '海尔'
            }, {
                id: 112,
                gname: '美的'
            }, ]
        }, {
            id: 12,
            gname: '洗衣机'
        }]
    }, {
        id: 2,
        name: '服饰'
    }];
    // 我们想要做输入id号,就可以返回的数据对象
    // 1. 利用 forEach 去遍历里面的每一个对象
    function getID(json, id) {
        var o = {};
        // console.log(json);
        json.forEach(function(item) {
            // console.log(item);
            // console.log(item); // 2个数组元素
            if (item.id == id) {
                // console.log(item);
                o = item;
                console.log(o);
                // 2. 我们想要得里层的数据 11 12 可以利用递归函数
                // 里面应该有goods这个数组并且数组的长度不为 0 
            } else if (item.goods && item.goods.length > 0) {
                o = getID(item.goods, id);
            }
 
        });
        return o;
    }
    console.log(getID(data, 1));
    // console.log(getID(data, 2));
    // console.log(getID(data, 11));
    // console.log(getID(data, 12));
    // console.log(getID(data, 111));
</script>
</html>